package 设计模式.创建型.单例模式.创建一个多例模式;


import java.util.concurrent.ConcurrentHashMap;

/**
 * 这种多例模式的理解方式有点类似工厂模式。
 * 它跟工厂模式的不同之处是，多例模式创建的对象都是同一个类的对象，而工厂模式创建的是不同子类的对象，
 * 它还有点类似享元模式，两者的区别
 * 实际上，枚举类型也相当于多例模式，一个类型只能对应一个对象，一个类可以创建多个对象。
 */
public class Logger {
    private static final ConcurrentHashMap<String, Logger> instances
            = new ConcurrentHashMap<>();

    private Logger() {}

    public static Logger getInstance(String loggerName) {
        instances.putIfAbsent(loggerName, new Logger());
        return instances.get(loggerName);
    }

    public void log() {
        //...
    }
}